package com.wearemanner.triangle.framework.mock;

import com.github.javafaker.Faker;
import com.github.jsonzou.jmockdata.JMockData;
import com.wearemanner.triangle.common.util.Dates;

import java.util.Date;
import java.util.Locale;
import java.util.concurrent.TimeUnit;

/**
 * mock数据
 *
 * @author Sunny
 * @date 2021/2/19
 */
public class Mocks {

    private Mocks() {}

    private static final Faker FAKER = new Faker(Locale.CHINA);

    /**
     * mock对象
     *
     * @param clazz 需要mock数据的Bean Class
     * @author Sunny
     * @date 2021/2/19
     */
    public static <T> T mock(Class<T> clazz) {
        return JMockData.mock(clazz);
    }

    /**
     * mock对象
     *
     * @param clazz 需要mock数据的Bean Class
     * @param mockConfigTemplate mock数据的规则配置
     * @author Sunny
     * @date 2021/2/19
     */
    public static <T> T mock(Class<T> clazz, MockConfigTemplate mockConfigTemplate) {
        return JMockData.mock(clazz, mockConfigTemplate.getMockConfig());
    }

    /**
     * 生成用户姓名
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String username() {
        return FAKER.name().fullName();
    }

    /**
     * 生成手机号
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String mobile() {
        return FAKER.phoneNumber().cellPhone();
    }

    /**
     * 生成过去时间
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static Date past() {
        return FAKER.date().past(FAKER.random().nextInt(30), TimeUnit.DAYS);
    }

    /**
     * 生成过去时间 - 字符串
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String pastStr() {
        return Dates.formatDateTime(past());
    }

    /**
     * 生成未来时间
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static Date future() {
        return FAKER.date().future(FAKER.random().nextInt(30), TimeUnit.DAYS);
    }

    /**
     * 生成未来时间 - 字符串
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String futureStr() {
        return Dates.formatDateTime(future());
    }

    /**
     * 生成生日
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static Date birthday() {
        return FAKER.date().birthday();
    }

    /**
     * 生成头像url
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String avatar() {
        return FAKER.avatar().image();
    }

    /**
     * 生成 ipv4 的ip地址
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String ipv4() {
        return FAKER.internet().ipV4Address();
    }

    /**
     * 生成16进制颜色
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String color() {
        return FAKER.color().hex();
    }

    /**
     * 生成国家名称
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String country() {
        return FAKER.country().name();
    }

    /**
     * 生成省份名称
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String province() {
        return FAKER.address().state();
    }

    /**
     * 生成城市名称
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String city() {
        return FAKER.address().cityName();
    }

    /**
     * 生成区县名称
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String district() {
        return FAKER.address().cityName();
    }

    /**
     * 生成经度
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String longitude() {
        return FAKER.address().longitude();
    }

    /**
     * 生成纬度
     *
     * @author Sunny
     * @date 2021/2/19
     */
    public static String latitude() {
        return FAKER.address().latitude();
    }

    public static void main(String[] args) {
        System.out.println(FAKER.funnyName().name());
    }
}
